package com.shwread.android.ui.page.chat;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.os.Message;
import android.text.Html;
import android.util.Log;
import android.view.View;
import android.webkit.JavascriptInterface;
import android.webkit.JsPromptResult;
import android.webkit.JsResult;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.TextView;

import com.shwread.android.qysw.activity.BaseBusinessActivity;
import com.shwread.android.qysw.activity.MainActivity;
import com.shwread.android.qysw10000152.R;
import com.shwread.android.ui.page.AbstractUIPage;
import com.tgx.tina.android.ipc.framework.IUIPage;

import base.tina.core.task.infc.ITaskResult;
import logic.constants.AppConfig;
import logic.constants.Const;
import logic.constants.DefaultConsts;
import logic.util.Util;
import logic.util.logutil.LogUtil;

/**
 * 意见反馈
 */
public class DemocraticPage extends
        AbstractUIPage<MainActivity>
        implements
        View.OnClickListener
{
    public static boolean   isReload = true;
    private WebView wvWeb;
    private View common_title_layout;
    private static DemocraticPage instance;
    private TextView common_header_create_team;

    public static DemocraticPage getInstance(MainActivity t) {
        if (instance == null) {
            instance = new DemocraticPage(t);
        }
        return instance;
    }
    public static void destroy(){
        if(instance!=null){
            instance.dispose();
            instance = null;
        }
    }
    public DemocraticPage(MainActivity t) {
        super(t);
    }
    @Override
    public void dispose() {
        super.dispose();
        if(null!=wvWeb) wvWeb.destroy();
    }
    @Override
    public <T extends Activity> View createView(T t, int initializers) {
        if (curMyView != null) { return curMyView; }

        curMyView = bActivity.getLayoutInflater().inflate(R.layout.news_lay, null);

        initView();

        setWebView();

        return curMyView;
    }

    @SuppressLint("SetJavaScriptEnabled")
    private void setWebView() {
		/*
		 * webSettings 保存着WebView中的状态信息。
		 * 当WebView第一次被创建时，webSetting中存储的都为默认值。
		 * WebSetting和WebView一一绑定的。
		 * 如果webView被销毁了，那么我们再次调用webSetting中的方法时，会抛出异常。
		 */
        WebSettings webSettings = wvWeb.getSettings();
        //允许在webview中执行JavaScript代码
        webSettings.setJavaScriptEnabled(true);
        //设置webview是否支持缩放
        webSettings.setSupportZoom(false);
        webSettings.setDomStorageEnabled(true);
        webSettings.setAppCacheEnabled(false);
        webSettings.setBlockNetworkImage(false);
        webSettings.setUseWideViewPort(true);
        webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);


//        wvWeb.loadUrl(Const.NEWS_URL + "index.html?enterprise_id=" + AppConfig.getEnterpriseId());
        wvWeb.loadUrl(Const.DS_URL);
        Log.e("TAG", AppConfig.getEnterpriseId());
        wvWeb.setWebChromeClient(new HarlanWebChromeClient());
        wvWeb.setWebViewClient(new HarlanWebViewClient());


		/*
		 * 为js提供一个方法，注意该方法一般不写在UI线程中
		 * addJavascriptInterface(Object obj, String interfaceName)
		 * obj代表一个java对象，这里我们一般会实现一个自己的类，类里面提供我们要提供给javascript访问的方法
		 * interfaceName则是访问我们在obj中声明的方法时候所用到的js对象，调用方法为window.interfaceName.方法名(
		 * )
		 */
        wvWeb.addJavascriptInterface(new SubMaintenanceJavaScriptInterface(), "zqreader");
    }

    private void sendToastMessage(String url) {
        Message msg = Message.obtain();
        msg.what = DefaultConsts.UPDATEUI_FROM_NEWS_TODETAIL;
        Bundle bundle = new Bundle();
        bundle.putString(DefaultConsts.read_news_url_s, url);
        msg.setData(bundle);
        bActivity.getUIHandler().sendMessage(msg);
    }

    final class SubMaintenanceJavaScriptInterface
    {

        /** 在屏幕下端提示用户 */
        @JavascriptInterface
        public void openNewsDetail(String url) {
//			LogUtil.d("fw", "url：" + url);
//			sendToastMessage(url);
//			Intent intent = new Intent(bActivity, WebActivity.class);
//			intent.putExtra("URL",Const.NEWS_URL+url);
//			bActivity.startActivity(intent);
//            gotoNewsDetail(url);

        }

        /** 提供给B端打印日志 */
        public void fireLog(String log) {
            LogUtil.d("fw", log);
        }

        /**
         * 假如有历史记录 回退历史记录 否则退出容器
         */
        public void goBack() {
            BaseBusinessActivity.uiHandler.post(new Runnable()
            {
                @Override
                public void run() {
                    bActivity.onBackPressed();
                }
            });
        }
    }

    @Override
    public void notifyView(int cmd, Bundle bundle) {
        switch (cmd) {
            case DefaultConsts.UPDATEUI_FROM_NEWS_TODETAIL:
                String url = bundle.getString(DefaultConsts.read_news_url_s);
//                gotoNewsDetail(url);
                break;

            default:
                break;
        }
    }

   /* private void gotoNewsDetail(String url) {
        Intent intent = new Intent(bActivity, CommonWebActivity.class);
        intent.putExtra(DefaultConsts.title_s, "新闻详情");
        intent.putExtra(DefaultConsts.req_url_s, Const.NEWS_URL + url);
        bActivity.startActivity(intent);
        isReload = false;
    }*/

    @Override
    public int enter(IUIPage<?> prePage) {
//		if (wvWeb==null){
////			initView();
//		}
        if (isReload) wvWeb.loadUrl(Const.DS_URL );
        return 0;
    }

    @Override
    public int leave(IUIPage<?> nextPage) {

        return 0;
    }

    private void initView() {
        TextView tvTitle = (TextView) curMyView.findViewById(R.id.common_header_name);
        tvTitle.setText("意见反馈");
        wvWeb = (WebView) curMyView.findViewById(R.id.news_wv);
        common_header_create_team = (TextView) curMyView.findViewById(R.id.common_header_create_team);
        common_header_create_team.setText(Html.fromHtml("<u>与我相关</u>"));
        Button common_header_back = (Button) curMyView.findViewById(R.id.common_header_back);
        common_header_create_team.setVisibility(View.VISIBLE);
        common_header_back.setVisibility(View.VISIBLE);
        common_header_create_team.setOnClickListener(this);
        common_header_back.setOnClickListener(this);
    }


    /***
     * webChromeClient主要是将javascript中相应的方法翻译成android本地方法
     * 例如：我们重写了onJsAlert方法，那么当页面中需要弹出alert窗口时，便
     * 会执行我们的代码，按照我们的Toast的形式提示用户。
     */
    class HarlanWebChromeClient
            extends
            WebChromeClient
    {

        /*
         * 此处覆盖的是javascript中的alert方法。
         * 当网页需要弹出alert窗口时，会执行onJsAlert中的方法
         * 网页自身的alert方法不会被调用。
         */
        @Override
        public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
            Util.showToast(bActivity, message);
			/*
			 * 此处代码非常重要，若没有，android就不能与js继续进行交互了，
			 * 且第一次交互后，webview不再展示出来。
			 * result：A JsResult to confirm that the user hit enter.
			 * 我的理解是，confirm代表着此次交互执行完毕。只有执行完毕了，才可以进行下一次交互。
			 */
            result.confirm();
            return true;
        }

        /*
         * 此处覆盖的是javascript中的confirm方法。
         * 当网页需要弹出confirm窗口时，会执行onJsConfirm中的方法
         * 网页自身的confirm方法不会被调用。
         */
        @Override
        public boolean onJsConfirm(WebView view, String url, String message, JsResult result) {
            return true;
        }

        /*
         * 此处覆盖的是javascript中的confirm方法。
         * 当网页需要弹出confirm窗口时，会执行onJsConfirm中的方法
         * 网页自身的confirm方法不会被调用。
         */
        @Override
        public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, JsPromptResult result) {
            return true;
        }

        /*
         * 如果页面被强制关闭,弹窗提示：是否确定离开？
         * 点击确定 保存数据离开，点击取消，停留在当前页面
         */
        @Override
        public boolean onJsBeforeUnload(WebView view, String url, String message, JsResult result) {
            return true;
        }
    }

    class HarlanWebViewClient
            extends
            WebViewClient
    {
        /*
         * 点击页面的某条链接进行跳转的话，会启动系统的默认浏览器进行加载，调出了我们本身的应用
         * 因此，要在shouldOverrideUrlLoading方法中
         */
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            //使用当前的WebView加载页面
            if (url.contains("tel:"))
            {
                Intent intent = new Intent();
                intent.setAction(Intent.ACTION_DIAL);
                intent.setData(Uri.parse(url));
                context.startActivity(intent);
                return true;
            }
            view.loadUrl(url);
            return true;
        }

        /*
         * 网页加载完毕(仅指主页，不包括图片)
         */
        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            super.onPageStarted(view, url, favicon);
        }

        /*
         * 网页加载完毕(仅指主页，不包括图片)
         */
        @Override
        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);
        }

        /*
         * 加载页面资源
         */
        @Override
        public void onLoadResource(WebView view, String url) {
            super.onLoadResource(view, url);
        }

        /*
         * 错误提示
         */
        @Override
        public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
            super.onReceivedError(view, errorCode, description, failingUrl);
        }
    }

    @Override
    public void setStatus(int arg0) {

    }


    @Override
    public View updateView(int arg0, ITaskResult arg1) {
        return null;
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.common_header_create_team://与我相关
                bActivity.changePage(RelatedMePage.getInstance(bActivity), DEFAULT_STATUS);
                break;
            case R.id.common_header_back://返回
                bActivity.onBackPressed();
            default:
                break;
        }
    }
}
